package com.student.work.mapper;

import com.student.work.model.JobInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @date 2020/3/2 21:23
 */
@Mapper
@Repository
public interface JobInfoMapper {

    /**
     * 新增工作
     *
     * @param record 实体类参数
     * @return 新增状态
     */
    int insert(JobInfo record);

    /**
     * 根据工作id获取工作信息
     *
     * @param jobId 工作id
     * @return 工作信息
     */
    JobInfo selectByJobId(@Param("jobId") Long jobId);

    /**
     * 修改工作
     *
     * @param record 实体类参数
     * @return 更新状态
     */
    int update(JobInfo record);

    /**
     * 获取工作数量
     *
     * @param jobKeyword    搜索工作标题关键字
     * @param departKeyword 搜索工作部门关键字
     * @return 工作总数
     */
    int getCount(@Param("jobKeyword") String jobKeyword,
                 @Param("departKeyword") String departKeyword,
                 @Param("isRecommend") Integer isRecommend,
                 @Param("startTime") String startTime,
                 @Param("userId") Long userId);

    /**
     * 获取工作列表
     *
     * @param pageNum       页码
     * @param pageSize      页面数据量
     * @param jobKeyword    搜索工作标题关键字
     * @param departKeyword 搜索工作部门关键字
     * @return 工作列表
     */
    List<JobInfo> getJobList(@Param("pageNum") int pageNum,
                             @Param("pageSize") int pageSize,
                             @Param("jobKeyword") String jobKeyword,
                             @Param("departKeyword") String departKeyword,
                             @Param("isRecommend") Integer isRecommend,
                             @Param("startTime") String startTime,
                             @Param("userId") Long userId);

    /**
     * 根据jobId集合，查询工作列表
     *
     * @param jobIdList jobId集合
     * @return 工作列表
     */
    List<JobInfo> getJobByIdList(@Param("jobIdList") Set<Long> jobIdList);

    /**
     * 用工单位收到申请的列表
     *
     * @param pageNum     页码
     * @param pageSize    页面数据量
     * @param userId      用户id
     * @param applyStatus 申请状态
     * @return 申请列表
     */
    List<Map<String, Object>> getApplyByUserId(@Param("pageNum") int pageNum,
                                               @Param("pageSize") int pageSize,
                                               @Param("userId") Long userId,
                                               @Param("applyStatus") Integer applyStatus);

    /**
     * 用工单位收到申请的数量
     *
     * @param userId      用户id
     * @param applyStatus 申请状态
     * @return 总数
     */
    int getApplyCount(@Param("userId") Long userId,
                      @Param("applyStatus") Integer applyStatus);

    /**
     * 删除工作
     * @param jobId 工作id
     * @return 删除状态
     */
    int delete(@Param("jobId") Long jobId);

    int deleteByUser(@Param("userId") Long userId);
}